#include"EventLoop.h"

EventLoop::EventLoop():ep_(new Epoll)
{
}

EventLoop::~EventLoop()
{
    delete ep_;
}

void EventLoop::run()
{
    // 事件循环
    while (true)        
    {
        // 存放epoll返回的事件。并等待事件发生
        std::vector<Channel*> channels = ep_->loop(5 * 1000);
        // 如果 channles 为空，表示超时，回调TcpServer::epolltimeout
        if(channels.size() == 0)
        {
            epolltimeoutcallback_(this);   
        }
        // 遍历epoll返回的事件发生数组evs
        for(auto &ch: channels)  
        {
            ch->handleevent();
        }
    }
}

Epoll *EventLoop::ep()
{
    return ep_;
}

void EventLoop::setepolltimeoutcallback(std::function<void(EventLoop*)> fn)
{
    epolltimeoutcallback_ = fn;
}
